import axios from 'axios'
import { message,Modal  } from 'ant-design-vue'
import store from '@/store'
import { getToken } from './auth'
import global from '../config/global'

// create an axios instance
const service = axios.create({
    baseURL: global.BASE_API, // api 的 base_url
    timeout: 5000 // request timeout
})

// request interceptor
service.interceptors.request.use(
        config => {
            // Do something before request is sent
            if (store.getters.token) {
                // 让每个请求携带token-- ['X-Token']为自定义key 请根据实际情况自行修改
                config.headers['token'] = getToken()
            }
            return config
        },
        error => {
            // Do something with request error
            console.log(error) // for debug
            Promise.reject(error)
        }
)

// response interceptor
service.interceptors.response.use(
        // response => response,
        /**
         * 下面的注释为通过在response里，自定义code来标示请求状态
         * 当code返回如下情况则说明权限有问题，登出并返回到登录页
         * 如想通过 xmlhttprequest 来状态码标识 逻辑可写在下面error中
         * 以下代码均为样例，请结合自生需求加以修改，若不需要，则可删除
         */
        response => {
            const res = response.data
            if (response.status === 200) {
                // 50008:非法的token; 50012:其他客户端登录了;  -1:Token 过期了;
                if (res.code === 50008 || res.code === 50012 || res.code === -1) {
                    Modal.confirm({
                        title: '您的登录签名已过期，可以取消继续留在该页面，或者重新登录?',
                        okText: '重新登录',
                        okType: 'danger',
                        cancelText: '取消',
                        onOk() {store.dispatch('FedLogOut').then(() => {
                            location.reload() // 为了重新实例化vue-router对象 避免bug
                        })},
                        onCancel() {}
                    })
                    return false
                }
                return res
            } else {
                message({
                    message: res.message,
                    type: 'error',
                    duration: 5 * 1000
                })

                return Promise.reject('error')
            }
        },
        error => {
            // console.log('err' + error) // for debug
            message({
                message: error.message,
                type: 'error',
                duration: 5 * 1000
            })
            return Promise.reject(error)
        }
)

export default service
